#pragma once
#include <vector>
#include <opencv2/core/core.hpp>
#include <opencv2/xfeatures2d/nonfree.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>

using namespace cv;

class ASiftDetector
{
public:
	ASiftDetector();
	void set_feature(Ptr<Feature2D> a);
	void detectAndCompute(const Mat& img, std::vector< KeyPoint >& keypoints, Mat& descriptors);

private:
	void affineSkew(double tilt, double phi, Mat& img, Mat& mask, Mat& Ai);
	Ptr<Feature2D> feature;
};

